/*
 * Project Name: jmax
 * File Name: UserSessionService.java
 * Copyright: Copyright(C) 1985-2015 ZKTeco Inc. All rights reserved.
 */
package com.xdtech.shiro.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.xdtech.shiro.dao.UserSessionDao;
import com.xdtech.shiro.model.UserSession;

/**
 * TODO 一句话功能简述，请确保和下面的block tags之间保留一行空行
 * <p>
 * TODO 功能详细描述，若不需要请连同上面的p标签一起删除
 * 
 * @author <a href="max.zheng@zkteco.com">郑志雄</>
 * @version TODO 添加版本
 * @see 相关类或方法，不需要请删除此行
 * @since 2015-2-6 下午4:34:44
 */
@Service
public class UserSessionService 
{
	@Autowired
	private UserSessionDao userSessionDao;
	
	public UserSession findOneById(String sessionId) {
		return userSessionDao.findUniqueBy("sessionId", sessionId);
	}
	
	public void saveOrUpdate(UserSession userSession) {
		userSessionDao.save(userSession);
	}

	/**
	 * 上线
	 * 
	 * @param userOnline
	 */
	public void online(UserSession userSession)
	{
		userSessionDao.save(userSession);
	}

	/**
	 * 下线
	 * 
	 * @param sid
	 */
	public void offline(String sessionId)
	{
		UserSession userSession = findOneById(sessionId);
		if (userSession != null)
		{
			userSessionDao.delete(userSession);
		}
		//游客 无需记录上次访问记录
		//此处使用数据库的触发器完成同步
		//        if(userOnline.getUserId() == null) { 
		//            userLastOnlineService.lastOnline(UserLastOnline.fromUserOnline(userOnline));
		//        }
	}

	/**
	 * 批量下线
	 * 
	 * @param needOfflineIdList
	 */
	public void batchOffline(List<String> needOfflineIdList)
	{
		//delete from UserOnline o where o.id in (?1)
		for (String id : needOfflineIdList)
		{
			offline(id);
		}
	}

	/**
	 * 无效的UserOnline
	 * 
	 * @return
	 */
//	public Page<UserOnline> findExpiredUserOnlineList(Date expiredDate, Pageable pageable)
//	{
//		return getUserOnlineRepository().findExpiredUserOnlineList(expiredDate, pageable);
//	}
}
